package com.zh.note.demo.java8;

import com.zh.note.common.bean.User;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class collectorsToMapDemo {
    public static void main(String[] args) {
        List<User> userLists = new ArrayList<>();
        userLists.add(new User(1001, "张三", 18));
        userLists.add(new User(1002, "李四", 15));
        userLists.add(new User(1003, "王五", 16));
        userLists.add(new User(1004, "赵六", 17));

        Map<Integer, User> collect1 = userLists.stream().collect(Collectors.toMap(user -> user.getId(), Function.identity(), (x, y) -> x));
        Map<Integer, User> collect2 = userLists.stream().collect(Collectors.toMap(User::getId, v -> v, (x, y) -> x));
        Map<Integer, User> collect3 = userLists.stream().collect(Collectors.toMap(User::getId, Function.identity()));
        Map<Integer, String> collect4 = userLists.stream().collect(Collectors.toMap(User::getId, User::getName));

        System.out.println(collect1);
        System.out.println(collect2);
        System.out.println(collect3);
        System.out.println(collect4);

//       .collect(Collectors.toMap(User::getId, v -> v, (x, y) -> x))
//        第一个参数User::getId 表示选择 User 的 getId 作为map的key值；
//        第二个参数 v -> v 表示选择将原来的对象作为map的value值；
//        第三个参数 (v1, v2) -> v1 中，如果v1与v2的key值相同，选择v1作为那个key所对应的value值。


        Stream<String> stream = Stream.of("I", "love", "you", "too");
        Map<String, Integer> map = stream.collect(Collectors.toMap(Function.identity(), String::length));
        System.out.println(map);


    }
}
